#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#pragma once
#include <QMainWindow>
#include <QUdpSocket>
#include <QLabel>
#include <QImage>
#include <QTimer>
#include <QMutex>
#include <QListWidget>
#include <QDir>
// 人脸检测相关头文件
#include <opencv2/opencv.hpp>
#include <opencv2/objdetect.hpp>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_btnStream_clicked();
    void on_btnPhoto_clicked();
    void readPendingDatagrams();
    void on_btnFaceDetection_clicked();
    void on_btnAlbum_clicked();  // 新增相册按钮槽函数
    void showSelectedPhoto(QListWidgetItem* item);  // 显示选中的照片
    void autoTakePhoto();  // 新增自动拍照槽函数

    void on_btnDisconnect_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::MainWindow *ui;
    QUdpSocket socket;
    QHostAddress serverAddr = QHostAddress("192.168.31.140");
    quint16      serverPort = 8887;
    bool streaming = false;
    bool photoRequested = false;
    QByteArray buffer;
    quint32 expectedSize = 0;
    QString currentIp;
    quint16 currentPort;

    // 人脸检测相关成员
    cv::CascadeClassifier faceCascade;
    bool faceDetectionEnabled = false;
    QTimer detectionTimer;
    QImage lastProcessedImage;
    QMutex imageMutex;

    // 自动拍照相关成员
    QTimer autoPhotoTimer;
    bool autoPhotoEnabled = false;

    // 相册相关成员
    QDialog* albumDialog;  // 相册对话框
    QListWidget* photoListWidget;  // 照片列表
    QLabel* photoDisplayLabel;  // 照片显示标签

    QImage detectFaces(const QImage& img);
    void loadPhotos();  // 加载照片列表
};
#endif // MAINWINDOW_H
